前幾天我們學會了如何讀取、顯示、操作圖片,
今天要來認識非常重要的一個觀念:「色彩空間的轉換」!
在影像處理中,我們經常需要轉換不同的色彩空間,
這會影響我們怎麼處理圖片、怎麼擷取顏色範圍,或做後續的影像分析。
OpenCV 讀進來的彩色圖片,預設是 BGR 格式,也就是「藍綠紅」的順序:
import cv2
img = cv2.imread('image.jpg')
print(img[0, 0]) # 範例:印出第一個像素的 BGR 值
範例輸出可能是:
[128 192 255] # 表示 B=128, G=192, R=255
這和我們一般習慣的 RGB 順序(紅綠藍)是反過來的!
若你要使用 matplotlib
顯示圖片,或與其他函式庫整合,就需要轉為 RGB:
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
這樣就可以正確顯示顏色了,不然圖會「色偏」!
有時候我們只需要處理亮度資訊,這時可以把圖轉為灰階:
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray Image', gray)
cv2.waitKey()
cv2.destroyAllWindows()
轉成灰階後,圖片就只剩下單通道(每個像素只有一個亮度值),
適合用於邊緣偵測、二值化處理、形狀分析等。
HSV 是一種更貼近人類感知的色彩空間:
項目 | 說明 |
---|---|
H | Hue(色相,0~179) |
S | Saturation(飽和度) |
V | Value(明度) |
使用 HSV 的好處是:
可以比較容易選擇顏色範圍,例如:抓紅色、藍色、膚色等等。
轉換方式如下:
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
你可以印出某個像素的 HSV 值看看:
print(hsv[100, 200])
OpenCV 常用轉換 | 描述 |
---|---|
cv2.COLOR_BGR2RGB |
BGR → RGB |
cv2.COLOR_BGR2GRAY |
BGR → 灰階圖 |
cv2.COLOR_BGR2HSV |
BGR → HSV 色彩空間 |
cv2.COLOR_GRAY2BGR |
灰階 → 彩色(3 通道) |
cv2.COLOR_HSV2BGR |
HSV → BGR |
今天我們學會了重要的「色彩空間轉換」技巧,包含:
cv2.cvtColor()
可轉換為:
這些技巧在後續的圖像處理、邊緣偵測、色彩追蹤等任務中都會用到,
熟練它們能讓你在影像世界中更加靈活運用!